# abc 模块是 Python 中用于定义抽象基类（Abstract Base Classes, ABC）的工具。
# 抽象基类的主要作用是定义接口或规范，强制子类实现特定的方法或行为。
# 它在设计模式、框架开发和代码规范中非常有用。


# 导入abc模块
from abc import ABC, abstractmethod

# 定义抽象类
# ABC 类用于定义抽象基类。继承自 ABC 的类是抽象类。
# 和java一样，抽象类不能被实例化，实现了所有的抽象方法的子类才可以被实例化
class Animal(ABC):

    # @abstractmethod
    # 用于标记抽象方法。子类必须实现这些方法，否则会抛出 TypeError。
    @abstractmethod
    def say(self):
        pass

class Dog(Animal):
    def say(self):
        print("wang~~~")

class Cat(Animal):
    def say(self):
        print("meow~~~")

dog = Dog()
cat = Cat()

dog.say()
cat.say()